package org.dllwh.utils.google.request;

import java.util.Map;

/**
 * 把今天最好的表现当作明天最新的起点．．～
 * <p>
 * Today the best performance as tomorrow the newest starter!
 *
 * @ClassName HttpRequest
 * @Description 构建HTTP的请求对象, 接口中的大部分方法均返回接口本身便于链式写法
 * @Date 2025-06-12 11:27
 * @版本 V 1.0.1
 * @since JDK 17
 */
public interface HttpRequest<Req extends HttpRequest<Req>> {
    /**
     * 设置请求地址
     *
     * @param url 请求地址
     * @return 返回当前类Req的对象自己
     */
    Req url(String url);

    /**
     * 为url地址设置请求参数，即url?username=admin&pwd=123
     *
     * @param name  参数名
     * @param value 参数值
     * @return 返回当前类Req的对象自己
     */
    Req queryString(String name, Number value);

    /**
     * 为url地址设置请求参数，即url?username=admin&pwd=123
     *
     * @param name  参数名
     * @param value 参数值
     * @return 返回当前类的对象自己
     */
    Req queryString(String name, String value);

    /**
     * 为url地址设置请求参数，即url?username=admin&pwd=123
     *
     * @param name    参数名
     * @param value   参数值
     * @param replace 值为则替换
     * @return 返回当前类Req的对象自己
     */
    Req queryString(String name, String value, boolean replace);

    /**
     * 为url地址设置请求参数，即url?username=admin&pwd=123
     *
     * @param parameters 参数对
     * @return 返回当前类Req的对象自己
     */
    Req queryString(Map<String, String> parameters);

    /**
     * 添加请求头信息
     *
     * @param key   请求头键名
     * @param value 请求头值
     * @return 返回当前类Req的对象自己
     */
    Req header(String key, String value);

    /**
     * 从请求头中移除键值
     *
     * @param key 请求头键名
     * @return 返回当前类Req的对象自己
     */
    Req removeHeader(String key);
}
